#include "type.h"

instruction* generiqueOp(char* op, variable a, variable b){
  instruction* instr = empty_instr();
    if(!strcmp(op, "add") || !strcmp(op, "sub") || !strcmp(op, "mul") || !strcmp(op, "div")) {
      instr.fonction = malloc(strlen(op)*sizeof(char*));
      strcpy(instr.fonction, op);
      instr.parametre = strlen(2*sizeof(char*));
      instr.parametre = a.nom;
      instr.parametre = b.nom;
      
      tailInstr->next = instr;
      tailInstr = instr;
    }

    else if(!strcmp(op, "eq") || !strcmp(op, "ne")) {
	}
    else if(!strcmp(op, "ge") || !strcmp(op, "gt") || !strcmp(op, "lt")){
    }
    else if(!strcmp(op, "le")){
    }
    else if(!strcmp(op, "and") || !strcmp(op, "or")){
    }
  if(!strcmp(op, "aff")){
    instr.fonction = malloc(strlen("aff")*sizeof(char));
    instr.fonction = "aff";
    instr.parametres = malloc(2*sizeof(char*));
    instr.parametres[1] = a.nom;
    instr.parametres[2] = b.nom;
    instr.retour = a.nom;
    return intr;
  }
}

void ecrireFonction(){

  switch(tailFunc->f.type){
  case(1):
    fprintf(fichier, "define i32 %s(){\n", tailFunc->f.nom);
    break;
  case(3):
    fprintf(fichier, "define float %s(){\n", tailFunc->f.nom);
    break;
  case(4):
    fprintf(fichier, "define i1 %s(){\n", tailFunc->f.nom);
    break;
  case(0):
    fprintf(fichier, "define void %s(){\n", tailFunc->f.nom);
    tailFunc->f.type = 6;
    break;
  default:
    printf("Je n'ai pas réussi à déterminer le type de la fonction : %s\n Voila le switch : %d\n", tailFunc->f.nom, tailFunc->f.type);
    break;
  }
  instruction* currentInstr = headInstr->next;
  while(currentInstr != NULL){
    printf("Voila l'instruction printé : %s\n", currentInstr->fonction);
    variable a = currentInstr->parametre[0];
    variable b = currentInstr->parametre[1];
    variable retour = currentInstr->retour;
    operation(currentInstr->fonction, a, b, retour);

    currentInstr = currentInstr->next;
  }
  fprintf(fichier, "}\n");
}

variable exec(variable a, variable b){
  int i;
  for(i = 0; i<nbr_type; ++i){
    if(

  }
}

